#include <iostream>
#include <memory>

class MyClass {
public:
    MyClass(int val) : value(val) {
        std::cout << "Constructing MyClass with value: " << value << std::endl;
    }

    ~MyClass() {
        std::cout << "Destructing MyClass with value: " << value << std::endl;
    }

    void doSomething() {
        std::cout << "Doing something with value: " << value << std::endl;
    }

private:
    int value;
};

int main() {
    // 使用std::shared_ptr来管理动态分配的对象
    std::shared_ptr<MyClass> sharedPtr = std::make_shared<MyClass>(42);

    // 使用std::unique_ptr来管理动态分配的对象
    std::unique_ptr<MyClass> uniquePtr = std::make_unique<MyClass>(99);

    // 可以像普通指针一样使用智能指针
    sharedPtr->doSomething();
    uniquePtr->doSomething();

    // 当智能指针超出作用域时，对象会被自动销毁，无需手动释放内存
    return 0;
}
